package com.zzh.zzhaiagent.tools;

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 终端操作工具类 Windows
 */
@Component
public class TerminalOperationTool {

    // 可配置的 Python 解释器路径（支持 Windows/Linux/Mac）
    private static final String PYTHON_EXECUTABLE = "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\python.exe"; // Windows 下若需指定路径可改为 "python.exe" 或绝对路径

    @Tool(description = "执行终端命令或 Python 脚本")
    public String executeCommand(
            @ToolParam( description = "终端命令（如 'dir'）或 Python 脚本路径（如 'script.py'）") String command,
            @ToolParam(description = "传递给脚本的参数（可选，多个参数用逗号分隔）", required = false) String args) {
        StringBuilder output = new StringBuilder();
        List<String> commandList = new ArrayList<>();

        // 处理 Python 脚本执行逻辑
        if (isPythonScript(command)) {
            commandList.add(PYTHON_EXECUTABLE); // 添加 Python 解释器
            commandList.add(command); // 添加脚本路径
        } else {
            // 普通终端命令（如 dir、echo）
            commandList.add("cmd.exe");
            commandList.add("/c");
            commandList.add(command);
        }

        // 解析并添加参数
        if (StringUtils.hasText(args)) {
            String[] argArray = args.split(",");
            for (String arg : argArray) {
                commandList.add(arg.trim()); // 去除参数前后空格
            }
        }

        try {
            ProcessBuilder builder = new ProcessBuilder(commandList);
            // 合并错误流到输出流（确保错误信息被捕获）
            builder.redirectErrorStream(true);
            Process process = builder.start();

            // 使用 BufferedReader 读取输出（支持大文本）
            try (BufferedReader reader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    output.append(line).append("\n");
                }
            }

            int exitCode = process.waitFor();
            if (exitCode != 0) {
                output.insert(0, "Command execution failed (Exit Code: " + exitCode + ")\n");
            }
        } catch (IOException e) {
            output.append("IO 异常: ").append(e.getMessage()).append("\n");
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt(); // 恢复中断状态
            output.append("执行被中断: ").append(e.getMessage()).append("\n");
        } catch (Exception e) {
            output.append("未知错误: ").append(e.getMessage()).append("\n");
        }

        return output.toString().trim();
    }

    /**
     * 判断是否为 Python 脚本（根据文件扩展名）
     */
    private boolean isPythonScript(String command) {
        return command.toLowerCase().endsWith(".py");
    }
}
